﻿using ClassMySQL;
using System.Data;

namespace TeacherLoad.Classes
{
    internal static class SendToServer
    {
        private static string database = ServerMySQL.Database;   // Название базы данных
        private static string sql = "";     // Команда SQL

        #region Работа со списком специальностей

        /// <summary>
        /// Получение данных из таблицы "Специальности"
        /// </summary>
        /// <returns></returns>
        internal static DataTable GetSpec()
        {
            sql = $"SELECT * FROM {database}.specialization";
            return ServerMySQL.GetData(sql);
        }
        /// <summary>
        /// Добавление новой специальности
        /// </summary>
        /// <param name="spec"></param>
        /// <returns></returns>
        internal static bool AddSpec(Specialization spec)
        {
            sql = $"INSERT INTO {database}.specialization " +
                $"(code, name_spec, qualification) " +
                $"VALUES ('{spec.Code}', '{spec.NameSpec}', " +
                $"'{spec.Qualification}')";
            return OperationResult(sql);
        }
        /// <summary>
        /// Редактирование специальности
        /// </summary>
        /// <param name="spec"></param>
        /// <returns></returns>
        internal static bool EditSpec(Specialization spec)
        {
            sql = $"UPDATE `{database}`.`specialization` SET " +
                $"`code` = '{spec.Code}', `name_spec` = '{spec.NameSpec}', " +
                $"`qualification` = '{spec.Qualification}' " +
                $"WHERE (id = '{spec.Id}')";
            return OperationResult(sql);
        }
        #endregion

        #region Работа со списком дисциплин
        /// <summary>
        /// Получение данных из таблицы "Дисциплины"
        /// </summary>
        /// <returns></returns>
        internal static DataTable GetItems()
        {
            sql = $"SELECT * FROM {database}.items";
            return ServerMySQL.GetData(sql);
        }
        /// <summary>
        /// Добавление новой дисциплины
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        internal static bool AddItem(AcademicItem item)
        {
            sql = $"INSERT INTO {database}.items " +
                $"(item) " +
                $"VALUES ('{item.ItemName}')";
            return OperationResult(sql);
        }
        /// <summary>
        /// Редактирование дисциплины
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        internal static bool EditItem(AcademicItem item)
        {
            sql = $"UPDATE `{database}`.`items` SET " +
                $"`item` = '{item.ItemName}' " +
                $"WHERE (id = '{item.Id}')";
            return OperationResult(sql);
        }
        #endregion

        #region Работа со списком групп
        /// <summary>
        /// Получение данных из таблицы "Группы"
        /// </summary>
        /// <returns></returns>
        internal static DataTable GetGroup()
        {
            sql = $"SELECT * FROM {database}.ListGroup";
            return ServerMySQL.GetData(sql);
        }
        /// <summary>
        /// Добавление новой группы
        /// </summary>
        /// <param name="group"></param>
        /// <returns></returns>
        internal static bool AddGroup(UchGroup group)
        {
            sql = $"INSERT INTO {database}.groups " +
                $"(course, name, idspec, begin_year, id_uchplan) " +
                $"VALUES ({group.Course}, '{group.Name}', " +
                $"{group.IdSpec}, {group.BeginYear}, {group.IdUchPlan})";
            return OperationResult(sql);
        }
        /// <summary>
        /// Редактирование группы
        /// </summary>
        /// <param name="group"></param>
        /// <returns></returns>
        internal static bool EditGroup(UchGroup group)
        {
            sql = $"UPDATE `{database}`.`groups` SET " +
                $"`course` = {group.Course}, `name` = '{group.Name}', " +
                $"`idspec` = {group.IdSpec}, `begin_year` = {group.BeginYear}, " +
                $"`id_uchplan` = {group.IdUchPlan} " +
                $"WHERE (id = {group.Id})";
            return OperationResult(sql);
        }
        #endregion

        #region Работа со списком преподавателей
        /// <summary>
        /// Получение данных из таблицы "Преподаватели"
        /// </summary>
        /// <returns></returns>
        internal static DataTable GetTeachers()
        {
            sql = $"SELECT * FROM {database}.teachers";
            return ServerMySQL.GetData(sql);
        }
        /// <summary>
        /// Добавление преподавателя
        /// </summary>
        /// <param name="teacher"></param>
        /// <returns></returns>
        internal static bool AddTeacher(Teacher teacher)
        {
            sql = $"INSERT INTO {database}.teachers " +
                $"(fullName) VALUES ('{teacher.FullName}')";
            return OperationResult(sql);
        }
        /// <summary>
        /// Редактирование преподавателя
        /// </summary>
        /// <param name="teach"></param>
        /// <returns></returns>
        internal static bool EditTeacher(Teacher teacher)
        {
            // Используем тернарную операцию
            // (ссылка на информацию: https://metanit.com/sharp/tutorial/2.5.php)
            // Проверяем, уволен ли преподаватель, если да, то используем число 1, иначе - 0 (ноль)
            int dismis = teacher.Dismissed ? 1 : 0;
            if (dismis == 0)
            {
                sql = $"UPDATE `{database}`.`teachers` SET " +
                $"`fullName` = '{teacher.FullName}', " +
                $"`teacherDismissed` = '{dismis}', " +
                $"`dateDismissed` = null " +
                $"WHERE (id = '{teacher.Id}')";
            }
            else
            {
                sql = $"UPDATE `{database}`.`teachers` SET " +
                $"`fullName` = '{teacher.FullName}', " +
                $"`teacherDismissed` = '{dismis}', " +
                $"`dateDismissed` = '{teacher.DateDismissed}' " +
                $"WHERE (id = '{teacher.Id}')";
            }
            return OperationResult(sql);
        }
        #endregion

        #region Работа со списком учебных планов
        /// <summary>
        /// Получение данных из таблицы "Учебные планы".
        /// В качестве параметра передается идентификатор специальности.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        internal static DataTable GetUchPlan(int id)
        {
            sql = $"SELECT * FROM {database}.plan_list WHERE idspec = {id}";
            return ServerMySQL.GetData(sql);
        }
        /// <summary>
        /// Добавление учебного плана
        /// </summary>
        /// <param name="plan"></param>
        /// <returns></returns>
        internal static bool AddUchPlan(UchPlan plan)
        {
            sql = $"INSERT INTO {database}.plan_list " +
                    $"(year_approval, idspec) " +
                    $"VALUES ('{plan.Year}', '{plan.IdSpec}')";
            return OperationResult(sql);
        }
        internal static bool EditUchPlan(UchPlan plan)
        {
            sql = $"UPDATE `{database}`.`plan_list` SET " +
                $"`year_approval` = {plan.Year}, `idspec` = '{plan.IdSpec}' " +
                $"WHERE (id = {plan.Id})";
            return OperationResult(sql);
        }
        #endregion

        #region Вспомогательный метод
        /// <summary>
        /// Метод позволяет добавить, обновить и удалить данные.
        /// Возврат - успешность операции.
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        private static bool OperationResult(string sql)
        {
            if (ServerMySQL.CrudOperation(sql) > 0)
                return true;
            else return false;
        }
        #endregion
    }
}